Electronic systems and circuits are often utilized in a number of applications to achieve advantageous results. Numerous electronic technologies such as computers, video equipment, and communication systems facilitate increased productivity and cost reduction in analyzing and communicating information in most areas of business, science, education and entertainment. Frequently, these activities involve storage of vast amounts of important and confidential information and significant resources are expended storing and processing the information. Maintaining and tracking changes and updates to the information is often very important for a variety or reasons (e.g., recovery, corruption correction, etc.).
Block reference counts are often utilized to track the number of files sharing blocks when implementing data sharing in file system. Typically a variation of a b-tree type data structure is utilized to track such reference counts. Portions or extents of data (e.g., blocks, ranges, etc.) can become shared or unshared during operations such as file snapshot creation, writing to shared blocks, truncating shared blocks, deduplication of data between files, etc. These operations can occur in a variety of environments (e.g., general file system environment, virtual machine environment, etc.). When these operations do occur, it is usually necessary to update the reference counts in the b-tree during such operations. However, b-tree updates typically involve multiple disk I/Os and as a result often cause unacceptable performance penalties, especially in a cluster file system environment. Furthermore, the b-tree itself can become a source of contention, which usually worsens in the case of a cluster environment.